package cn.tedu.charging.device.service;

import cn.tedu.charging.common.param.GunStatusUpdateParam;
import cn.tedu.charging.common.vo.StationInfoVO;
import cn.tedu.charging.device.po.GunPO;
import cn.tedu.charging.device.po.StationPO;
import cn.tedu.charging.device.repository.GunRepository;
import cn.tedu.charging.device.repository.StationRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DeviceService{
    @Autowired
    private StationRepository stationRepository;
    @Autowired
    private GunRepository gunRepository;
    public List<StationInfoVO> nearStations(Double longitude, Double latitude, Double distance) {
        //充电站 附近查询功能一定是依赖redis redis目前 数据是空的,数据库有充电站 但是redis没有数据
        //直接调用仓储层,到redis中查询 vo返回
        return stationRepository.nearStations(longitude,latitude,distance);
    }

    public StationInfoVO stationDetail(Integer id) {
        //将id查询 交给仓储层,业务层 不关心是从数据库来的 还是从缓存redis来的
        StationPO po=stationRepository.getStationById(id);
        return po2vo(po);
    }

    private StationInfoVO po2vo(StationPO po) {
        //不涉及到 和中心点的距离 id stationName latitude longitude.
        StationInfoVO vo=new StationInfoVO();
        vo.setId(po.getId());
        vo.setStationLat(po.getStationLat());
        vo.setStationLng(po.getStationLng());
        vo.setStationName(po.getStationName());
        //distance
        return vo;
    }

    public Boolean updateGunStatus(GunStatusUpdateParam param) {
        //1.使用gunId查询gun实体数据
        GunPO gunPO = gunRepository.getById(param.getGunId());
        //2.判断一下 如果不空 才继续更新
        if (gunPO!=null){
            //update charging_gun_info set status=#{status} where id=#{gunId}
            //gunRepository.update().set("gun_status",param.getStatus()).eq("id",param.getGunId());
            GunPO poParam=new GunPO();//除了status和id以外 其他属性都是空
            poParam.setGunStatus(param.getStatus());
            poParam.setId(param.getGunId());
            boolean success = gunRepository.updateById(poParam);//会使用id属性做条件 其他非空字段拼接 set
            return success;
        }
        return false;
    }
}
